#!/usr/bin/env python
# -*- coding: utf-8 -*-
# Filename: mesa_de_ayuda.py

##
# Módulos del sistema
# Parte gáfica
try:
    import pygtk
    pygtk.require("2.0")
    import gtk
    import gtk.glade
except ImportError, error:
    print error
    print "Necesitas la librería gráficas gtk+pygtk"

# Utilidades
import os
from datetime import datetime

##
# Módulos propios
try:
    from lib.database import Usuario
except ImportError, error:
    print error
    print "Problemas con la BD en: '/gui/mesa_de_ayuda.py'"

try:
    from lib.grupo_de_resolucion import MesaDeAyuda
    from lib.config import WIDTH, HEIGHT
    from gui.create_ticket import CreateTicket
    from gui.msj_retroalimentacion import MensajeDeAdvertencia, MensajeDeAbout
    from gui.msj_retroalimentacion import MensajeDeNotificacion
    from gui.buscar_ticket import BuscarTicket
    from lib.funciones_utiles import close
    from lib.database import Ticket
    import inicio_de_sesion
except ImportError, error:
    print error
    print "No se pudieron cargar los modulos necesarios para correr el sistema"
    print "Error en mesa_de_ayuda"

class MesaDeAyudaGUI:
    """Grupo de Resolución mesa de ayuda.

    Clase que se encargará de la parte grafica del actor mesa de ayuda. Es el
    único que puede abrir y cerrar ticket.

    """
    def __init__(self, usuario_logueado):
        """Keyword arguments:
        usuario_registrado -- nombre de usuario logueado en el sistema
        """

        self.gladefile = "gui/ghhp.glade"
        self.wTree = gtk.glade.XML(self.gladefile, "MesaDeAyuda")
        self.window = self.wTree.get_widget("MesaDeAyuda")
        self.un_dict={"on_toolbutton1_clicked": self.create_ticket,
                "on_toolbutton2_clicked" : self.find_ticket,
                "on_toolbutton3_clicked" : self.my_ticket,
                "on_toolbutton4_clicked" : self.close_sesion,
                "on_mesa_de_ayuda_destroy" : self.salir,
                "on_menuitem17_activate" : self.about,
                "on_salir2_activate" : self.salir,
                "on_button140_clicked": self.close,
                "on_button139_clicked": self.limpiar_campos_busqueda,
                "on_button138_clicked": self.buscar_ticket,
                "on_button77_clicked": self.cerrar_ticket,
                "on_button102_clicked": self.derivar_ticket,
                "on_button99_clicked": self.detalle_ticket,
                "on_button100_clicked": self.aceptar,
                "on_button101_clicked": self.close,
                "on_button103_clicked": self.configurar_reporte,
                "on_button48_clicked": self.validate_create_ticket,#ticket 1
                "on_button58_clicked": self.cancelar_ticket,
                "on_button67_clicked": self.close_ticket,
                "on_button75_clicked": self.derivar_ticket_dos,
                "on_button59_clicked": self.validate_derivar_ticket,
                "on_button64_clicked": self.close_ticket,#!!!FIXME
                "on_toolbutton7_clicked": self.atras,
                "on_toolbutton12_clicked": self.adelante,
                "on_button78_clicked": self.validate_create_ticket,#ticket 2
                "on_button104_clicked": self.cancelar_ticket,
                "on_button107_clicked": self.close_ticket,
                "on_button108_clicked": self.derivar_ticket_dos,
                "on_button105_clicked": self.validate_derivar_ticket,
                "on_button109_clicked": self.validate_create_ticket,#ticket 3
                "on_button126_clicked": self.cancelar_ticket,
                "on_button145_clicked": self.close_ticket,
                "on_button146_clicked": self.derivar_ticket_dos,
                "on_button127_clicked": self.validate_derivar_ticket,
                "on_button147_clicked": self.validate_create_ticket,# ticket 4
                "on_button148_clicked": self.cancelar_ticket,
                "on_button151_clicked": self.close_ticket,
                "on_button152_clicked": self.derivar_ticket_dos,
                "on_button149_clicked": self.validate_derivar_ticket}
        # Conecto las señales
        self.wTree.signal_autoconnect(self.un_dict)
        self.wTree.get_widget("calendar1").select_day(datetime.now().day)
        self.usuario_logueado = usuario_logueado
        self.mesa_de_ayuda = MesaDeAyuda()#self.usuario_logueado.grupo_de_resolucion)
        self.put_user_and_date(self.usuario_logueado.empleado.apellido + " " +
                self.usuario_logueado.empleado.nombre + " ")
        self.notebook = self.wTree.get_widget("notebook1")
        self.paginas_crear_ticket = ([self.wTree.get_widget("vbox22"), False],
                [self.wTree.get_widget("vbox56"),False],
                [self.wTree.get_widget("vbox119"),False],
                [self.wTree.get_widget("vbox125"),False])
        self.caja_buscar = self.wTree.get_widget("vbox114")
        self.lista_crear_ticket = {}
        self.pagina_ticket = 0
        self.bandera = True
        self.obtener_numero_ticket()
        self.window.maximize()
        gtk.main()

    def obtener_numero_ticket(self):
        # Obtenemos el último nro_ticket desde la BD
        try:
            ticket = Ticket.select()[-1]
            if ticket:
                if ticket.id > ticket.numero_ticket:
                    self.numero_ticket = ticket.id + 1
                else:
                    self.numero_ticket = ticket.numero_ticket + 1
        except IndexError, error:
            self.numero_ticket = 1

    def put_user_and_date(self, user):
        """Muestra el usuario """
        texto = (self.wTree.get_widget("label626").get_text() + ":", user,
                ("Usuario: %s" % self.usuario_logueado.u_legajo),
                "Grupo de Resolucion:", "Mesa de Ayuda")
        self.wTree.get_widget("label626").set_text("\n".join(texto))

    def create_ticket(self, widget):
        """GUI crear ticket"""
        print "Crear ticket"
        if self.pagina_ticket < 4:
            self.lista_crear_ticket[self.pagina_ticket]= CreateTicket(self,
                    self.usuario_logueado,
                    self.numero_ticket,
                    self.pagina_ticket)
            self.numero_ticket+=1
            self.pagina_ticket
            if self.paginas_crear_ticket[self.pagina_ticket][1] == False:
                self.paginas_crear_ticket[self.pagina_ticket][0].show()
                self.paginas_crear_ticket[self.pagina_ticket][1] = True
            self.caja_buscar.hide()#formulario buscar
            if self.bandera:
                self.notebook.show()
                self.bandera = False
            self.pagina_ticket+=1
        else:
            error = ("El sistema por el momento solo trabaja con cuatro",
                    "ticket simultaneos a la hora de la creacion")
            msj = MensajeDeNotificacion("\n".join(error), self.window)
            if msj.msj.run() == -5:
                msj.msj.destroy()

    def find_ticket(self, widget):
        """GUI buscar ticket."""
        self.buscar = BuscarTicket(self)
        self.caja_buscar.show()
        self.notebook.show()
        self.buscar.imprimir_consola()
        print "Buscar ticket"
    
    def my_ticket(self, widget):
        """Permite generar ... se me ocurrio que podiamos mostrar los ticket que
        fue generado en su sesion, ó todos lo anteriores
        """
        print "My ticket"

    def close_sesion(self, widget):
        """Cierra la sesión."""
        print "Close Sesion"
        texto = "¿Está seguro que desea cerrar la sesion?"
        msj = MensajeDeAdvertencia(texto, self.window)
        if msj.msj.run() == gtk.RESPONSE_YES:
            print "Cerrando sesion"
            self.window.destroy()
            inicio = inicio_de_sesion.InicioSesion()
        else:
            msj.msj.destroy()
       
    def cancelar_ticket(self, widget):
        """descrip"""
        texto = "¿Esta seguro que desea cancelar la operacion?"
        msj = MensajeDeAdvertencia(texto, self.window)
        if msj.msj.run() == gtk.RESPONSE_YES:
            pagina = self.notebook.get_current_page()
            self.lista_crear_ticket[pagina-1].volver_al_estado_inicial()
            self.lista_crear_ticket[pagina-1] = None
            del self.lista_crear_ticket[pagina-1]
            print "Cerraste pagina %d de crear ticket" % pagina
            self.paginas_crear_ticket[pagina-1][1] = False
            self.paginas_crear_ticket[pagina-1][0].hide()
            self.pagina_ticket-=1
            msj.msj.destroy()
        else:
            msj.msj.destroy()


    def close(self, widget):
        texto = "¿Está seguro que desea cancelar la operacion?"
        msj = MensajeDeAdvertencia(texto, self.window)
        if msj.msj.run() == gtk.RESPONSE_YES:
            msj.msj.destroy()
            self.limpiar_campos_busqueda()
            self.buscar.vbox_15.hide()
            self.buscar.hbox_118.show()
            self.buscar = None
            self.notebook.hide()
        else:
            msj.msj.destroy()
    
    def limpiar_campos_busqueda(self, widget=None):
        self.buscar.limpiar_campos()

    def buscar_ticket(self, widget):
        self.buscar.aceptar()
        self.buscar.buscar_ticket()

    def salir(self, widget):
        """Cierra la ventana actual."""
        print "Gracias por utilizar Ghhp"
        gtk.main_quit()
    
    def derivar_ticket(self, widget):
        """Funcion que es llamada desde la busqueda de ticket"""
        print self.buscar
        print type(self.buscar)
        self.buscar.derivar_ticket()
           
    def cerrar_ticket(self, widget):
        self.buscar.cerrar_ticket()
        
    def configurar_reporte(self, widget=None):
        #self.buscar.config_report()
        texto = "Todavia no se implemento"
        msj = MensajeDeNotificacion(texto, self.window)
        if msj.msj.run() == -5:
            msj.msj.destroy()

    def aceptar(self, widget):
        self.buscar.aceptar()
    
    def detalle_ticket(self, widget):
        print "Detalle del ticket"
        self.buscar.detalle_del_ticket()

    def about(self, widget):
        """Breve explicacion del metodo/clase.

        Detalle del uso del mismo
        """
        print "About"
        msj = MensajeDeAbout(widget)
        if msj.msj.run() == -6:
            msj.msj.destroy()
    
    def adelante(self, widget):
        """Si hay solapas de ticket avanza en una"""
        self.notebook.next_page()
    
    def atras(self, widget):
        """Si hay solapas retrocede"""
        self.notebook.prev_page()
    
    def close_ticket(self, widget):
        """Elimina una posicion de la lista_crear_ticket y le saca un valor a
        paginas_crear_ticket"""
        pagina = self.notebook.get_current_page()
        self.lista_crear_ticket[pagina-1].close_ticket()
        self.lista_crear_ticket[pagina-1].volver_al_estado_inicial()
        self.lista_crear_ticket[pagina-1] = None
        del self.lista_crear_ticket[pagina-1]
        print "Cerraste pagina %d de crear ticket" % pagina
        self.paginas_crear_ticket[pagina-1][1] = False
        self.paginas_crear_ticket[pagina-1][0].hide()
        self.pagina_ticket-=1#!!!FIXME
        #self.notebook.hide()

    def validate_create_ticket(self, widget):
        """ La idea es realiar esta funcion, como todas las otras con el objeto
        de la pagina en la que estamos"""
        pagina = self.notebook.get_current_page()
        print "Apretaste el boton aceptar de la pagina: %d" % pagina
        print self.lista_crear_ticket[pagina-1]
        self.lista_crear_ticket[pagina-1].validate_create_ticket()
        print "Ticket's"
        print self.mesa_de_ayuda.tickets
        

    def validate_derivar_ticket(self, widget):
        """Valida si podemos derivar el ticket. Usasa desde la creacion del
        ticket"""
        print "Derivar ticket"
        pagina = self.notebook.get_current_page()
        bandera = self.lista_crear_ticket[pagina-1].validate_derivar_ticket()
        if bandera:
            self.lista_crear_ticket[pagina-1].volver_al_estado_inicial()
            self.lista_crear_ticket[pagina-1] = None
            print self.lista_crear_ticket
            del self.lista_crear_ticket[pagina-1]
            self.paginas_crear_ticket[pagina-1][0] = False
            self.paginas_crear_ticket[pagina-1][1].hide()
            self.pagina_ticket-=1
        #self.notebook.hide()

    def derivar_ticket_dos(self, widget):
        """Usada desde la creacion del ticket. Derivamos"""
        print "Derivar ticket"
        pagina = self.notebook.get_current_page()
        self.lista_crear_ticket[pagina-1].derivar_ticket()

"""
if __name__=='__main__':
    my_aplication = MesaDeAyuda()
    gtk.main()
"""

